

// unicode - utf-8
// unicode_utf8

// 将一整个字符串转换成utf8
// 疑问？官方是如何写的？
pub fn unicode_utf8(ustr: &String) -> Vec<u8> {
    let mut utf8_str: Vec<u8> = Vec::new();
    for c in ustr.chars() {
        let len = c.len_utf8();
        let mut cb:[u8; 4] = [0u8; 4];
        {//构成一个作用域，用于隔离（cb_b）引用借用
            //从cb中创建一个可修改引用借用
            let cb_a = &mut cb[..len];
            //将可修改引用借用给encode_utf8函数，内部有不安全代码
            let r = c.encode_utf8(cb_a);
            println!("r = {:?}", r);
        }//作用域后cb_a已经失效了，这个引用借用被释放了
        //再创建个引用借用，但是这里不需要修改了
        let cb_b = &cb[..len];
        //循环将encode_utf8修改的内容装到vec中。
        for b in cb_b {
            utf8_str.push(b.clone());
        }
    }
    return utf8_str;
}


pub fn test_fn(){
    let hello = String::from("こんにちは");
    let vec = unicode_utf8(&hello);
    for v in vec.iter(){
        println!(" unicode_utf8 : {:?}", v);
    }
    println!("反向从utf8编码到unicode字符串{:?}", "!");
    let sparkle_heart = String::from_utf8(vec).unwrap();
    println!("反向从utf8编码到unicode字符串{:?}", sparkle_heart);
    //
    let sou_byte = hello.into_bytes();
    for v in sou_byte.iter(){
        println!(" into_bytes : {:?}", v);
    }
    println!(" String.into_bytes方法就是把字符串to utf8 ！");
}